from fast_langdetect import *
from app.api.schemas import Lang
from langchain.text_splitter import RecursiveCharacterTextSplitter


class LangDetectUtil:
    @staticmethod
    def detect(content) -> Lang:
        """单语言检查"""
        line = " ".join(content.splitlines())
        lang = detect_language(line)
        return Lang.of(lang)

    @staticmethod
    def detect_multi(content):
        """多语言检查"""
        return detect_multilingual(content)


class TextSplitterUtil:

    def __init__(self):
        # 定义按词组切割的文本分割器
        self.separators = ["\n\n", "\n", " ", ""]
        self.splitter = RecursiveCharacterTextSplitter(
            chunk_size=50, chunk_overlap=0, separators=self.separators
        )

    def split(self, content: str) -> list:
        """切割文本"""
        chunks = self.splitter.split_text(content)
        # 将 chunks 和 content 进行比较，如果有被切割，则在 chunks 中的后面加上被丢弃的切割符号
        result = []
        pos = 0
        for chunk in chunks:
            end_pos = pos + len(chunk)
            if end_pos < len(content) and content[end_pos] in self.separators:
                chunk += content[end_pos]
                end_pos += 1
            result.append(chunk)
            pos = end_pos
        return result


if __name__ == "__main__":
    # content = "الفلاح مثل الشخص يستطَدَ وضعواً لكلمات الصغيرة، حتى عندما تقريباً لم يستطيع أن سماعها بشكل صحيحًا ذات هذا الفلاح الصيفٌ من أيدي، وهذا التشخيص بالمشاهده تحريك وضبط في مواجهه الخاطر لهذا الجهاز الداخل أو التعار هذا المعامل رأيت وضعية و اعتقدوا أن الناس العاملة قد واجه إلى مشكلات كبيرة، عندها يقوم به الأماكن للسؤال"
    # print(LangDetectUtil.detect(content))
    # print(LangDetectUtil.detect_multi(content))

    content = "Helsinki, November 21 (Xinhua) -- The Finnish government announced on the 21st that it will no longer participate in the activities of the Barents Sea Europe Arctic Circle Council after 2025."
    splitter = TextSplitterUtil()
    print(splitter.split(content))
